package trajeto;

import java.util.ArrayList;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import br.com.sistransporte.transite.linha.controller.LinhaFacade;
import br.com.sistransporte.transite.trajeto.controller.TrajetoFacade;
import br.com.sistransporte.transitedto.linha.LinhaDTO;
import br.com.sistransporte.transitedto.linha.LinhaPontoDTO;
import br.com.sistransporte.transitedto.trajeto.TrajetoDTO;
import br.com.src.dto.abstractdto.AbstractDTO;
import br.com.src.dto.requisicao_retorno.RequisicaoServico;
import br.com.src.dto.requisicao_retorno.RetornoServico;
import br.com.src.utilidades.Utilidades;

@ContextConfiguration( locations = { "classpath:rootTeste-context.xml", "classpath:rootTesteLog-context.xml" } )
@RunWith( SpringJUnit4ClassRunner.class )
public class TrajetoTeste {
	@Test
	public void filtrar() throws Throwable {
		LinhaDTO linha = new LinhaDTO("3");
		
		RequisicaoServico requisicaoServico = new RequisicaoServico( "teste", linha );
		RetornoServico retornoServico = TrajetoFacade.getInstance().listarTrajetosPorLinha(requisicaoServico);
		
		if ( !Utilidades.isNuloOuVazio( retornoServico.erro ) ) {
			throw retornoServico.erro;
		}

		for ( AbstractDTO abstractsDTOs : retornoServico.getDtosRetorno() ) {
			System.out.println( abstractsDTOs );
		}

	}

	//@Test
	public void inserir() throws Throwable{
		TrajetoDTO trajeto = new TrajetoDTO(null, "teste, teste, teste, teste, teste, teste, teste, teste, teste, teste", null);
		
		RequisicaoServico requisicaoServicoLinha = new RequisicaoServico( "nelson" , new LinhaDTO("1"));
		RetornoServico retornoServicoLinha = LinhaFacade.getInstance().filtrar( requisicaoServicoLinha );
		
		ArrayList< LinhaDTO > listaLinha = new ArrayList< LinhaDTO >();
		
		for ( AbstractDTO linhaDTO : retornoServicoLinha.getDtosRetorno() ) {
			listaLinha.add( (LinhaDTO) linhaDTO );
        }
		
		RequisicaoServico requisicaoServico = new RequisicaoServico( "nelson" , new LinhaDTO( null, "Jd. Anchieta", "Centro", "Jd. Anchieta", null));
		RetornoServico retornoServico = LinhaFacade.getInstance().inserir( requisicaoServico );

		LinhaDTO linhaDto = (LinhaDTO) retornoServico.getSingleDTO();
		
		LinhaPontoDTO linhaPonto = new LinhaPontoDTO();
		Integer ordemParada = 1;
		
		filtrar();

		if( !Utilidades.isNuloOuVazio( retornoServico.erro )){
			throw retornoServico.erro;
		}
	}

	//@Test
	public void alterar() throws Throwable{
		RequisicaoServico requisicaoServico = new RequisicaoServico( "nelson" , new LinhaDTO("1",null,null,null,null));
		RetornoServico retornoServico = LinhaFacade.getInstance().alterar( requisicaoServico );

		filtrar();

		if( !Utilidades.isNuloOuVazio( retornoServico.erro )){
			throw retornoServico.erro;
		}
	}

	//@Test
	public void delete() throws Throwable{
		// Consultando
		RequisicaoServico requisicaoServicoFilter = new RequisicaoServico( "teste", new LinhaDTO("3") );
		RetornoServico retornoServicoFilter = LinhaFacade.getInstance().filtrar( requisicaoServicoFilter );
		if ( !Utilidades.isNuloOuVazio( retornoServicoFilter.erro ) ) {
			throw retornoServicoFilter.erro;
		}
		for ( AbstractDTO abstractsDTOs : retornoServicoFilter.getDtosRetorno() ) {
			System.out.println( abstractsDTOs );
		}
		
		
		RequisicaoServico requisicaoServico = new RequisicaoServico( "gabriel" , retornoServicoFilter.getSingleDTO() );
		RetornoServico retornoServico = LinhaFacade.getInstance().excluir( requisicaoServico );

		filtrar();

		if( !Utilidades.isNuloOuVazio( retornoServico.erro )){
			throw retornoServico.erro;
		}
	}
}
